AWS WAF のルールビルダーで複数の否定条件を設定する方法を教えてください
困っていた内容
AWS WAF でルールグループを使っていて、複数のパス(/aaa/, /bbb/)をブロック条件から除外したいです。
NOT ルールステートメントを含むルールを作成すればよいと考えましたが、NOT ルールステートメントでは 2 つ以上の条件を指定することができません。
2 つ以上の否定条件は作成できないのでしょうか?もしやり方があれば方法を教えてください。
どう対応すればいいの?
ルールビルダーで 2 つ以上の否定条件は作成できます。
WAF コンソール上の「If a request」の項目で「doesn't match the statement (NOT)」を選択すると 1 つしか条件が設定できません。
2 つ以上の条件を設定するには、matches all the statements (AND)かmatches at least one of the statements (OR)を選択し、Negate statement resultsをチェックします。
matches all the statements (AND) の設定手順例を記載します。
- AWS WAF ルールビルダーの編集画面を開く
- 「Rule」の項目で Name を入力
- 「If a request」の項目で matches all the statements (AND) を選択
- 「Statement 1」の「Negate statement (NOT)」の項目で「Negate statement results」をチェック(項目名が NOT Statement 1 に変わる)
- 「Statement 1」の条件を適宜入力
- Inspect: URI Path
- Match type: Contains string
- String to match: /aaa/
- 「Statement 2」の「Negate statement (NOT)」の項目で「Negate statement results」をチェック(項目名が NOT Statement 2 に変わる)
- 「Statement 2」の条件を適宜入力
- Inspect: URI Path
- Match type: Contains string
- String to match: /bbb/
- 「Then」の項目で Action を選択
- 「Add rule」ボタンをクリック
参考資料
- NOT rule statement - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced
The NOT rule statement logically negates the results of a single nested statement, so the nested statements must not match for the NOT statement to match, and vice versa. This requires one nested statement.
-
AND rule statement - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced
- OR rule statement - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced